<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.29
     from modlib.tnf on 19 December 2010 -->

<TITLE>Introduction of specification modules - Instantiation and Use of Modules</TITLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000" BACKGROUND="gifs/bg.gif">
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0" VALIGN=BOTTOM>
<TR VALIGN=BOTTOM>
<TD WIDTH="160" VALIGN=BOTTOM>
<A HREF="http://eli-project.sourceforge.net/">
<IMG SRC="gifs/elilogo.gif" BORDER=0>
</A>&nbsp;
</TD>
<TD WIDTH="25" VALIGN=BOTTOM>
<img src="gifs/empty.gif" WIDTH=25 HEIGHT=25>
</TD>
<TD ALIGN=LEFT WIDTH="475" VALIGN=BOTTOM>
<A HREF="index.html"><IMG SRC="gifs/title.png" BORDER=0></A>
</TD>
<!-- |DELETE FOR SOURCEFORGE LOGO|
<TD>
<a href="http://sourceforge.net/projects/eli-project">
<img
  src="http://sflogo.sourceforge.net/sflogo.php?group_id=70447&amp;type=13"
  width="120" height="30"
  alt="Get Eli: Translator Construction Made Easy at SourceForge.net.
    Fast, secure and Free Open Source software downloads"/>
</a>
</TD>
|DELETE FOR SOURCEFORGE LOGO| -->
</TR>
</TABLE>

<HR size=1 noshade width=785 align=left>
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=0>
<TR>
<TD VALIGN=TOP WIDTH="160">
<h4>General Information</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="index.html">Eli: Translator Construction Made Easy</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="gindex_1.html#SEC1">Global Index</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="faq_toc.html" >Frequently Asked Questions</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ee.html" >Typical Eli Usage Errors</a> </td></tr>
</table>

<h4>Tutorials</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="EliRefCard_toc.html">Quick Reference Card</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="novice_toc.html">Guide For new Eli Users</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="news_toc.html">Release Notes of Eli</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="nametutorial_toc.html">Tutorial on Name Analysis</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="typetutorial_toc.html">Tutorial on Type Analysis</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ee.html" >Typical Eli Usage Errors</a> </td></tr>
</table>

<h4>Reference Manuals</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ui_toc.html">User Interface</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="pp_toc.html">Eli products and parameters</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lidoref_toc.html">LIDO Reference Manual</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ee.html" >Typical Eli Usage Errors</a> </td></tr>
</table>

<h4>Libraries</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lib_toc.html">Eli library routines</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="modlib_toc.html">Specification Module Library</a></td></tr>
</table>

<h4>Translation Tasks</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lex_toc.html">Lexical analysis specification</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="syntax_toc.html">Syntactic Analysis Manual</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="comptrees_toc.html">Computation in Trees</a></td></tr>
</table>

<h4>Tools</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lcl_toc.html">LIGA Control Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="show_toc.html">Debugging Information for LIDO</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="gorto_toc.html">Graphical ORder TOol</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="fw_toc.html">FunnelWeb User's Manual</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ptg_toc.html">Pattern-based Text Generator</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="deftbl_toc.html">Property Definition Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="oil_toc.html">Operator Identification Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="tp_toc.html">Tree Grammar Specification Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="clp_toc.html">Command Line Processing</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="cola_toc.html">COLA Options Reference Manual</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="idem_toc.html">Generating Unparsing Code</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="mon_toc.html">Monitoring a Processor's Execution</a> </td></tr>
</table>

<h4>Administration</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="sysadmin_toc.html">System Administration Guide</a> </td></tr>
</table>

<HR WIDTH="100%">
<A HREF="mailto:eli-project-users@lists.sourceforge.net">
<IMG SRC="gifs/button_mail.gif" BORDER=0 ALIGN="left"></A>
<A HREF="index.html"><IMG SRC="gifs/home.gif" BORDER=0 ALIGN="right"></A>

</TD>
<TD VALIGN=TOP WIDTH="25"><img src="gifs/empty.gif" WIDTH=25 HEIGHT=25></TD>

<TD VALIGN=TOP WIDTH="600">
<H1>Introduction of specification modules</H1>
<P>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_1.html"><IMG SRC="gifs/prev.gif" ALT="Previous Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_toc.html"><IMG SRC="gifs/up.gif" ALT="Table of Contents" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT="">
<HR size=1 noshade width=600 align=left>
<H1><A NAME="SEC2" HREF="modlib_toc.html#SEC2">Instantiation and Use of Modules</A></H1>
<P>
To use a specification module, e.g. the <CODE>AlgScope</CODE> module in the 
<CODE>Name</CODE> library, 
it is instantiated by the line
<P>
<PRE>
   $/Name/AlgScope.gnrc :inst
</PRE>
in a <CODE>.specs</CODE> file. All component specification files of the 
module are thus included in the set of specifications. A derivation
<PRE>
   x.specs:allspecs
</PRE>
can be used to inspect all the instantiated files.
<P>
The module instance obtained by the instantiation command above
provides <CODE>.lido</CODE> symbol computations for a symbol named <CODE>IdUseEnv</CODE>,
among other specifications.
<P>
The above instantiation command is sufficient if only one instantiation of 
the <CODE>AlgScope</CODE> module is used.
<A NAME="IDX10"></A>
<A NAME="IDX9"></A>
Several instantiations of the same module are distinguished by generic 
instance names supplied as arguments of the instantiation
<P>
<PRE>
   $/Name/AlgScope.gnrc +instance=CtrlVar :inst
</PRE>
In this case another instance of the <CODE>AlgScope</CODE> module is generated
having the instance name <CODE>CtrlVar</CODE>. It may coexist with the
unnamed instance created above. The names of its files and
of specified entities (symbols, attributes, etc.) are 
prefixed by the instance identifier, e.g.
<CODE>CtrlVarIdUseEnv</CODE>.
<A NAME="IDX11"></A>
<A NAME="IDX12"></A>
<P>
Some modules have a second generic parameter <CODE>referto</CODE>.
It may specialize the module in a second dimension on instantiation:
The <CODE>AlgScope</CODE> module provides compuations for <CODE>Key</CODE> attributes
in <CODE>IdUseEnv</CODE> contexts that represent applied occurrences of identifiers.
In some situations it may be necessary to compute more than one
<CODE>Key</CODE> attribute in an <CODE>IdUseEnv</CODE> context (if the identifier is
bound in different name spaces). Hence, the <CODE>referto</CODE> of
the <CODE>AlgScope</CODE> module modifies the names of the <CODE>Key</CODE> attributes.
If the <CODE>AlgScope</CODE> module is instantiated by
<P>
<PRE>
   $/Name/AlgScope.gnrc +instance=CtrlVar +referto=Ctrl :inst
</PRE>
it provides computations for the attribute <CODE>CtrlVarIdUseEnv.CtrlKey</CODE>,
among other computations.
<P>
Other modules use the <CODE>referto</CODE> parameter for different purposes, e.g.
specifying the element type for a generic stack module.
<P>
If any of the two generic parameters <CODE>instance</CODE> or <CODE>referto</CODE>
is omitted, as in the first two examples, their value is
assumed to be the empty string.
<P>
If a module is instantiated as described its facilities can be used
in certain components of the user's specification:
Symbol computations as those provided by the <CODE>AlgScope</CODE> module
are associated to symbols of the user's tree grammar by <CODE>.lido</CODE>
constructs like
<P>
<PRE>
   SYMBOL UseIdent INHERITS IdUseEnv END;
</PRE>
<P>
Note: The symbols provided by modules are <CODE>CLASS</CODE> symbols in the
sense of LIDO, i. e. they may not be used directly as tree grammar
symbols. <CODE>INHERITS</CODE> constructs like the above are needed
to bind their computations to symbols of user's specification.
This means avoids accidental coincidence between names of tree
grammar symbols and of module roles.
<P>
Further <CODE>.lido</CODE> specifications may be neccessary to supply information to
or obtain information from the thus inherited computations.
<P>
Modules may also provide C functions (directly or via specifications
for other tools), e.g. functions of the environment module in case of the
<CODE>AlgScope</CODE> module. They may be called in computations of the user's
<CODE>.lido</CODE> specification, or in user's C modules if the appropriate
header file is included.
<A NAME="IDX13"></A>
<P>
The same instantiation mechanism may be applied to include user defined modules:
<P>
<PRE>
   /user/Lib/ModName.gnrc:inst
</PRE>
instantiates the module <CODE>ModName</CODE> of a user library. 
<P>
Such a module must contain of at least two files , e.g.
<CODE>/user/Lib/ModName.fw</CODE> containing the module's specifications
and <CODE>/user/Lib/ModName.gnrc</CODE>. The latter is an executable
shell script that performs the generic module instantiation.
It should have the following form:
<P>
<PRE>
   #!/bin/sh
   moddir=`expr $0 : '\(.*\)/.*' \| '.'`

   $1 -e "s/|NAME|/$2/g
   s/|KEY|/$3/g" "$moddir"/ModName.fw &#62; "$2"ModName.fw
</PRE>
The last two lines use <CODE>sed</CODE> to substitute the <CODE>instance</CODE>
parameter for any occurrence of <CODE>|NAME|</CODE> in the file <CODE>ModName.fw</CODE>
and the <CODE>referto</CODE> parameter for any occurrence of <CODE>|KEY|</CODE>.
<P>
<HR size=1 noshade width=600 align=left>
<P>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_1.html"><IMG SRC="gifs/prev.gif" ALT="Previous Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_toc.html"><IMG SRC="gifs/up.gif" ALT="Table of Contents" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT="">
<HR size=1 noshade width=600 align=left>
</TD>
</TR>
</TABLE>

</BODY></HTML>
